#pragma once
#include <boost/asio.hpp>
#include "CSession.h"
#include <memory.h>
#include <map>

using namespace std;
using boost::asio::ip::tcp;

/**
 * @brief 服务器类，用于处理TCP连接和会话管理
 */
class CServer
{
public:
	/**
	 * @brief 构造函数
	 * @param io_context Boost.Asio的IO上下文
	 * @param port 服务器监听端口
	 */
	CServer(boost::asio::io_context &io_context, short port);

	/**
	 * @brief 清除指定的会话
	 * @param sessionId 要清除的会话ID
	 */
	void ClearSession(std::string sessionId);

private:
	/**
	 * @brief 处理新的连接接受事件
	 * @param session 新建立的会话对象
	 * @param error 错误码
	 */
	void HandleAccept(shared_ptr<CSession> session, const boost::system::error_code &error);

	/**
	 * @brief 开始接受新的连接
	 */
	void StartAccept();

	boost::asio::io_context &_io_context;				   ///< Boost.Asio的IO上下文引用
	short _port;										   ///< 服务器监听端口
	tcp::acceptor _acceptor;							   ///< TCP连接接收器
	std::map<std::string, shared_ptr<CSession>> _sessions; ///< 会话映射表，保存所有活动的会话
};
